package main

import (
	"image/color"

	"github.com/fogleman/gg"
)

func main() {

	// 建立一个绘图环境，图片大小为 600×400 像素
	contextT := gg.NewContext(600, 400)

	// 用十六进制方式设置当前颜色
	contextT.SetHexColor("FFFFFF")

	// 用当前颜色来清空整个图片
	contextT.Clear()

	// 设置线宽为 2 个像素
	contextT.SetLineWidth(2)

	// 设置RGB颜色，每种颜色的数值范围是 0.0 - 1.0
	contextT.SetRGB(0.0, 0.0, 1.0)

	// 画一个圆，以坐标为 (200, 200) 的点为圆心，半径为 50像素
	contextT.DrawCircle(250, 250, 60)

	// 真正进行线条绘制，并且保留绘图路径以便后面填充颜色
	contextT.StrokePreserve()

	// 创建一个渐变色填充方案 gradientT
	// 是两点之间的圆环式渐变色
	gradientT := gg.NewRadialGradient(250, 250, 0, 250, 250, 80)
	gradientT.AddColorStop(0, color.RGBA{0, 0, 0, 255})
	gradientT.AddColorStop(1, color.RGBA{0, 0, 255, 255})

	// 设置用渐变色 gradientT 填充
	contextT.SetFillStyle(gradientT)

	// 真正进行填充，并清除绘画路径，因为后面已经不需要了
	contextT.Fill()

	// 开始用填充的方式绘制一个矩形

	// 用RGBA色彩体系设置当前颜色
	// 用 0 - 255 的数值范围表示颜色和透明度
	// 设置一定的透明度以便显示出被覆盖住的图形（圆形）
	contextT.SetRGBA255(0, 255, 0, 180)

	// 绘制一个左上角点坐标为 (300, 200)，宽 100，高 100的矩形
	contextT.DrawRectangle(300, 200, 100, 100)

	// 仅填充颜色不绘制边线
	contextT.Fill()

	// 开始用路径法画一个三角形

	// 用十六进制字符串设置颜色
	// 可以加上前面的“#”号，也可以后面加上一个字节表示透明度
	contextT.SetHexColor("#FF000099")

	// 将虚拟的画笔移动到坐标为 (300, 120) 的点
	contextT.MoveTo(300, 120)

	// 从当前点绘制一条线到坐标为 (240, 230)的点为止
	// 当前点将随之移动到 (240, 230)
	contextT.LineTo(240, 230)

	// 继续绘制一条直线到 (360, 230)
	contextT.LineTo(360, 230)

	// 继续绘制一条直线到 (300, 120)
	contextT.LineTo(300, 120)

	// 创建一个新的线性渐变色
	gradientT = gg.NewLinearGradient(240, 120, 360, 230)
	gradientT.AddColorStop(0, color.RGBA{0, 255, 0, 255})
	gradientT.AddColorStop(1, color.RGBA{0, 0, 255, 255})
	gradientT.AddColorStop(0.5, color.RGBA{255, 0, 0, 255})

	// 渐变色也可以用于线条颜色的渐变
	contextT.SetStrokeStyle(gradientT)

	// 设置粗一点的线宽以体现渐变色
	contextT.SetLineWidth(10)

	// 真正绘制三角形
	contextT.Stroke()

	// 保存图像为PNG格式的图片文件
	contextT.SavePNG(`c:\test\gg.png`)

}
